
//3170.删除星号以后字典序最小的字符串
class Solution {
public:
    string clearStars(string s) {
        int n=s.size();
        unsigned int mask=0;   //使用mask来记录栈是否为空,使用二进制的比特位来记录
        vector<stack<int>> nums(26);
        for(int i=0;i<n;i++)
        {
            if(s[i]=='*')
            {
                int k=countr_zero(mask);  //使用内置函数countr_zero找第一个不为1二进制位,即第一个不为空的栈
                auto& st=nums[k];
                s[st.top()]='0';
                st.pop();
                if(st.empty()) mask^=1<<k;
            }
            else 
            {
                nums[s[i]-'a'].push(i);
                mask|=1<<(s[i]-'a');
            }
        }

        string ret;
        for(auto e:s) 
        if(e!='0'&&e!='*') ret+=e;

        return ret;
    }
};